/*
 * Copyright (c) from 2000 to 2009
 * 
 * Network and System Laboratory 
 * Department of Computer Science 
 * College of Computer Science
 * National Chiao Tung University, Taiwan
 * All Rights Reserved.
 * 
 * This source code file is part of the NCTUns 6.0 network simulator.
 *
 * Permission to use, copy, modify, and distribute this software and
 * its documentation is hereby granted (excluding for commercial or
 * for-profit use), provided that both the copyright notice and this
 * permission notice appear in all copies of the software, derivative
 * works, or modified versions, and any portions thereof, and that
 * both notices appear in supporting documentation, and that credit
 * is given to National Chiao Tung University, Taiwan in all publications 
 * reporting on direct or indirect use of this code or its derivatives.
 *
 * National Chiao Tung University, Taiwan makes no representations 
 * about the suitability of this software for any purpose. It is provided 
 * "AS IS" without express or implied warranty.
 *
 * A Web site containing the latest NCTUns 6.0 network simulator software 
 * and its documentations is set up at http://NSL.csie.nctu.edu.tw/nctuns.html.
 *
 * Project Chief-Technology-Officer
 * 
 * Prof. Shie-Yuan Wang <shieyuan@csie.nctu.edu.tw>
 * National Chiao Tung University, Taiwan
 *
 * 09/01/2009
 */

#include "../common/fec/bch.h"
#include "dvb_s2.h"


/*
 * FEC encoders and decoders parameters.
 */
const unsigned int
Dvb_s2::_fec_parameter_table[][FEC_PARAM_COLS] = {
	/*
	 * BCH		BCH	BCH	LDPC	LDPC	LDPC
	 * uncoded	coded	t	q-value	max	max
	 * block	block	bit		v-node	c-node
	 * length	length	err		degree	degree
	 * (bit)	(bit)	correct
	 */
	{16008,		16200,	12,	135,	12,	4},	/* Normal FEC frame 1/4 */
	{21408,		21600,	12,	120,	12,	5},	/* Normal FEC frame 1/3 */
	{25728,		25920,	12,	108,	12,	6},	/* Normal FEC frame 2/5 */
	{32208,		32400,	12,	90,	8,	7},	/* Normal FEC frame 1/2 */
	{38688,		38880,	12,	72,	12,	11},	/* Normal FEC frame 3/5 */
	{43040,		43200,	10,	60,	13,	10},	/* Normal FEC frame 2/3 */
	{48408,		48600,	12,	45,	12,	14},	/* Normal FEC frame 3/4 */
	{51648,		51840,	12,	36,	11,	18},	/* Normal FEC frame 4/5 */
	{53840,		54000,	10,	30,	13,	22},	/* Normal FEC frame 5/6 */
	{57472,		57600,	8,	20,	4,	27},	/* Normal FEC frame 8/9 */
	{58192,		58320,	8,	18,	4,	30},	/* Normal FEC frame 9/10 */
	{3072,		3240,	12,	36,	12,	4},	/* Short FEC frame 1/4 */
	{5232,		5400,	12,	30,	12,	5},	/* Short FEC frame 1/3 */
	{6312,		6480,	12,	27,	12,	6},	/* Short FEC frame 2/5 */
	{7032,		7200,	12,	25,	8,	7},	/* Short FEC frame 1/2 */
	{9552,		9720,	12,	18,	12,	11},	/* Short FEC frame 3/5 */
	{10632,		10800,	12,	15,	13,	10},	/* Short FEC frame 2/3 */
	{11712,		11880,	12,	12,	12,	13},	/* Short FEC frame 3/4 */
	{12432,		12600,	12,	10,	3,	13},	/* Short FEC frame 4/5 */
	{13152,		13320,	12,	8,	13,	19},	/* Short FEC frame 5/6 */
	{14232,		14400,	12,	5,	4,	27}	/* Short FEC frame 8/9 */
};


/*
 * FEC encoders and decoders.
 */

/*
 * BCH systems in different modes.
 */
class Bch*
Dvb_s2::_bch[DVB_BCH_MODE] = {
	NULL, NULL, NULL, NULL
};
/*
 * LDPC systems in different modes.
 */
class Dvb_s2::Ldpc*
Dvb_s2::_ldpc[DVB_LDPC_MODE] = {
	NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL,
	NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL
};


/*
 * BCH code parameters.
 */
/*
 * BCH mode table.
 */
enum Dvb_s2::_dvb_bch_mode
Dvb_s2::_bch_mode_table[] = {
	DVB_BCH_GF16_T12,	/* Normal FEC frame 1/4 */
	DVB_BCH_GF16_T12,	/* Normal FEC frame 1/3 */
	DVB_BCH_GF16_T12,	/* Normal FEC frame 2/5 */
	DVB_BCH_GF16_T12,	/* Normal FEC frame 1/2 */
	DVB_BCH_GF16_T12,	/* Normal FEC frame 3/5 */
	DVB_BCH_GF16_T10,	/* Normal FEC frame 2/3 */
	DVB_BCH_GF16_T12,	/* Normal FEC frame 3/4 */
	DVB_BCH_GF16_T12,	/* Normal FEC frame 4/5 */
	DVB_BCH_GF16_T10,	/* Normal FEC frame 5/6 */
	DVB_BCH_GF16_T8,	/* Normal FEC frame 8/9 */
	DVB_BCH_GF16_T8,	/* Normal FEC frame 9/10 */
	DVB_BCH_GF14_T12,	/* Short FEC frame 1/4 */
	DVB_BCH_GF14_T12,	/* Short FEC frame 1/3 */
	DVB_BCH_GF14_T12,	/* Short FEC frame 2/5 */
	DVB_BCH_GF14_T12,	/* Short FEC frame 1/2 */
	DVB_BCH_GF14_T12,	/* Short FEC frame 3/5 */
	DVB_BCH_GF14_T12,	/* Short FEC frame 2/3 */
	DVB_BCH_GF14_T12,	/* Short FEC frame 3/4 */
	DVB_BCH_GF14_T12,	/* Short FEC frame 4/5 */
	DVB_BCH_GF14_T12,	/* Short FEC frame 5/6 */
	DVB_BCH_GF14_T12	/* Short FEC frame 8/9 */
};
/*
 * The primitive polynomial to generate the field GF(2^16), in ascending order.
 * p(x) =
 * 1x^0 + 0x^1  + 1x^2  + 1x^3  + 0x^4  + 1x^5  + 0x^6  + 0x^7 + 0x^8 +
 * 1      0       1       1       0       1       0       0      0
 * 0x^9 + 0x^10 + 0x^11 + 0x^12 + 0x^13 + 0x^14 + 0x^15 + 1x^16
 * 0      0       0       0       0       0       0       1
 */
const unsigned int
Dvb_s2::_bch_prim_poly_gf16[16 + 1] = {
	1, 0, 1, 1, 0, 1, 0, 0, 0,
	0, 0, 0 ,0, 0, 0, 0, 1
};
/*
 * The primitive polynomial to generate the field GF(2^14), in ascending order.
 * p(x) =
 * 1x^0 + 1x^1  + 0x^2  + 1x^3  + 0x^4  + 1x^5  + 0x^6  + 0x^7 +
 * 1      1       0       1       0       1       0       0
 * 0x^8 + 0x^9 + 0x^10 + 0x^11 + 0x^12 + 0x^13 + 1x^14
 * 0      0      0       0       0       0       1
 */
const unsigned int
Dvb_s2::_bch_prim_poly_gf14[14 + 1] = {
	1, 1, 0, 1, 0, 1, 0, 0,
	0, 0, 0 ,0, 0, 0, 1
};
/*
 * The generator polynomial of the t error correcting is obtained by
 * multiplying the first t polynomials in tables 6a and 6b in the
 * specification ETSI EN 302 307 V1.1.1 (2005-03).
 */
const unsigned int
Dvb_s2::_bch_gen_poly_gf16_t12[16 * 12] = {
	0, 1, 0, 0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 1, 0,
	0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1,
	1, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0,
	0, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 0,
	0, 1, 0, 1, 0, 0, 0, 0,	1, 1, 0, 0, 1, 1, 1, 1,
	0, 0, 1, 0, 1, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 0,
	1, 1, 0, 1, 1, 1, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1,
	0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 1,
	0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 1, 1,
	1, 0, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1, 1, 1,
	0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 0,
	0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 0, 0, 1, 1, 1
};
const unsigned int
Dvb_s2::_bch_gen_poly_gf16_t10[16 * 10] = {
	0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1,
	0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 1, 0, 1,
	1, 1, 1, 1, 1, 1, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0,
	0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 1,
	0, 1, 1, 0, 1, 0, 1, 0, 0, 1, 1, 1, 1, 0, 0, 0,
	0, 1, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1,
	1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0, 1, 0, 0, 0, 1,
	0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1,
	1, 0, 1, 1, 1, 0, 0, 0, 1, 0, 1, 1, 1, 0, 1, 1,
	0, 1, 1, 0, 0, 1, 0, 1, 1, 0, 0, 1, 0, 0, 0, 1
};
const unsigned int
Dvb_s2::_bch_gen_poly_gf16_t8[16 * 8] = {
	0, 0, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1,
	0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1,
	0, 1, 1, 1, 0, 0, 0, 1, 0, 0, 1, 0, 0, 1, 1, 1,
	1, 0, 0, 1, 0, 1, 1, 1, 1, 0, 1, 1, 1, 1, 0, 1,
	0, 0, 0, 1, 1, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0,
	0, 1, 1, 0, 1, 1, 0, 1, 0, 1, 1, 1, 0, 1, 0, 1,
	0, 0, 0, 0, 0, 1, 0, 0, 1, 1, 1, 1, 1, 0, 0, 1,
	0, 1, 1, 0, 0, 1, 1, 0, 0, 0, 1, 0, 1, 0, 1, 1
};
const unsigned int
Dvb_s2::_bch_gen_poly_gf14_t12[14 * 12] = {
	0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0,
	1, 0, 1, 1, 0, 1, 1, 0, 1, 1, 1, 1, 1, 0,
	1, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 0, 0, 1,
	1, 0, 1, 0, 0, 1, 1, 0, 1, 1, 0, 0, 1, 0,
	0, 1, 1, 0, 0, 0, 1, 0, 1, 1, 0, 0, 1, 1,
	0, 1, 0, 0, 1, 0, 0, 0, 1, 1, 1, 0, 1, 0,
	0, 0, 1, 1, 1, 0, 0, 1, 0, 0, 0, 0, 0, 1,
	1, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 1, 0,
	1, 0, 0, 0, 1, 1, 1, 1, 1, 1, 1, 0, 0, 1,
	1, 1, 1, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0, 1,
	0, 0, 0, 1, 0, 0, 0, 1, 1, 0, 0, 1, 0, 0,
	0, 0, 0, 1, 0, 1, 1, 0, 1, 0, 0, 1, 0, 1
};


/*
 * LDPC code parameters.
 */
/*
 * LDPC addresses of parity bit accumulators.
 */
const void*
Dvb_s2::Ldpc::_acc_addr_table[] = {
	_acc_addr_table_normal_1_4,	/* Normal FEC frame 1/4 */
	_acc_addr_table_normal_1_3,	/* Normal FEC frame 1/3 */
	_acc_addr_table_normal_2_5,	/* Normal FEC frame 2/5 */
	_acc_addr_table_normal_1_2,	/* Normal FEC frame 1/2 */
	_acc_addr_table_normal_3_5,	/* Normal FEC frame 3/5 */
	_acc_addr_table_normal_2_3,	/* Normal FEC frame 2/3 */
	_acc_addr_table_normal_3_4,	/* Normal FEC frame 3/4 */
	_acc_addr_table_normal_4_5,	/* Normal FEC frame 4/5 */
	_acc_addr_table_normal_5_6,	/* Normal FEC frame 5/6 */
	_acc_addr_table_normal_8_9,	/* Normal FEC frame 8/9 */
	_acc_addr_table_normal_9_10,	/* Normal FEC frame 9/10 */
	_acc_addr_table_short_1_4,	/* Short FEC frame 1/4 */
	_acc_addr_table_short_1_3,	/* Short FEC frame 1/3 */
	_acc_addr_table_short_2_5,	/* Short FEC frame 2/5 */
	_acc_addr_table_short_1_2,	/* Short FEC frame 1/2 */
	_acc_addr_table_short_3_5,	/* Short FEC frame 3/5 */
	_acc_addr_table_short_2_3,	/* Short FEC frame 2/3 */
	_acc_addr_table_short_3_4,	/* Short FEC frame 3/4 */
	_acc_addr_table_short_4_5,	/* Short FEC frame 4/5 */
	_acc_addr_table_short_5_6,	/* Short FEC frame 5/6 */
	_acc_addr_table_short_8_9	/* Short FEC frame 8/9 */
};
/*
 * Normal FEC frame 1/4
 */
const int
Dvb_s2::Ldpc::_acc_addr_table_normal_1_4[][13] = {
	{23606,	36098,	1140,	28859,	18148,	18510,	6226,	540,	42014,	20879,	23802,	47088,	-1},
	{16419,	24928,	16609,	17248,	7693,	24997,	42587,	16858,	34921,	21042,	37024,	20692,	-1},
	{1874,	40094,	18704,	14474,	14004,	11519,	13106,	28826,	38669,	22363,	30255,	31105,	-1},
	{22254,	40564,	22645,	22532,	6134,	9176,	39998,	23892,	8937,	15608,	16854,	31009,	-1},
	{8037,	40401,	13550,	19526,	41902,	28782,	13304,	32796,	24679,	27140,	45980,	10021,	-1},
	{40540,	44498,	13911,	22435,	32701,	18405,	39929,	25521,	12497,	9851,	39223,	34823,	-1},
	{15233,	45333,	5041,	44979,	45710,	42150,	19416,	1892,	23121,	15860,	8832,	10308,	-1},
	{10468,	44296,	3611,	1480,	37581,	32254,	13817,	6883,	32892,	40258,	46538,	11940,	-1},
	{6705,	21634,	28150,	43757,	895,	6547,	20970,	28914,	30117,	25736,	41734,	11392,	-1},
	{22002,	5739,	27210,	27828,	34192,	37992,	10915,	6998,	3824,	42130,	4494,	35739,	-1},
	{8515,	1191,	13642,	30950,	25943,	12673,	16726,	34261,	31828,	3340,	8747,	39225,	-1},
	{18979,	17058,	43130,	4246,	4793,	44030,	19454,	29511,	47929,	15174,	24333,	19354,	-1},
	{16694,	8381,	29642,	46516,	32224,	26344,	9405,	18292,	12437,	27316,	35466,	41992,	-1},
	{15642,	5871,	46489,	26723,	23396,	7257,	8974,	3156,	37420,	44823,	35423,	13541,	-1},
	{42858,	32008,	41282,	38773,	26570,	2702,	27260,	46974,	1469,	20887,	27426,	38553,	-1},
	{22152,	24261,	8297,	-1},
	{19347,	9978,	27802,	-1},
	{34991,	6354,	33561,	-1},
	{29782,	30875,	29523,	-1},
	{9278,	48512,	14349,	-1},
	{38061,	4165,	43878,	-1},
	{8548,	33172,	34410,	-1},
	{22535,	28811,	23950,	-1},
	{20439,	4027,	24186,	-1},
	{38618,	8187,	30947,	-1},
	{35538,	43880,	21459,	-1},
	{7091,	45616,	15063,	-1},
	{5505,	9315,	21908,	-1},
	{36046,	32914,	11836,	-1},
	{7304,	39782,	33721,	-1},
	{16905,	29962,	12980,	-1},
	{11171,	23709,	22460,	-1},
	{34541,	9937,	44500,	-1},
	{14035,	47316,	8815,	-1},
	{15057,	45482,	24461,	-1},
	{30518,	36877,	879,	-1},
	{7583,	13364,	24332,	-1},
	{448,	27056,	4682,	-1},
	{12083,	31378,	21670,	-1},
	{1159,	18031,	2221,	-1},
	{17028,	38715,	9350,	-1},
	{17343,	24530,	29574,	-1},
	{46128,	31039,	32818,	-1},
	{20373,	36967,	18345,	-1},
	{46685,	20622,	32806,	-1}
};

/*
 * Normal FEC frame 1/3
 */
const int
Dvb_s2::Ldpc::_acc_addr_table_normal_1_3[][13] = {
	{34903,	20927,	32093,	1052,	25611,	16093,	16454,	5520,	506,	37399,	18518,	21120,	-1},
	{11636,	14594,	22158,	14763,	15333,	6838,	22222,	37856,	14985,	31041,	18704,	32910,	-1},
	{17449,	1665,	35639,	16624,	12867,	12449,	10241,	11650,	25622,	34372,	19878,	26894,	-1},
	{29235,	19780,	36056,	20129,	20029,	5457,	8157,	35554,	21237,	7943,	13873,	14980,	-1},
	{9912,	7143,	35911,	12043,	17360,	37253,	25588,	11827,	29152,	21936,	24125,	40870,	-1},
	{40701,	36035,	39556,	12366,	19946,	29072,	16365,	35495,	22686,	11106,	8756,	34863,	-1},
	{19165,	15702,	13536,	40238,	4465,	40034,	40590,	37540,	17162,	1712,	20577,	14138,	-1},
	{31338,	19342,	9301,	39375,	3211,	1316,	33409,	28670,	12282,	6118,	29236,	35787,	-1},
	{11504,	30506,	19558,	5100,	24188,	24738,	30397,	33775,	9699,	6215,	3397,	37451,	-1},
	{34689,	23126,	7571,	1058,	12127,	27518,	23064,	11265,	14867,	30451,	28289,	2966,	-1},
	{11660,	15334,	16867,	15160,	38343,	3778,	4265,	39139,	17293,	26229,	42604,	13486,	-1},
	{31497,	1365,	14828,	7453,	26350,	41346,	28643,	23421,	8354,	16255,	11055,	24279,	-1},
	{15687,	12467,	13906,	5215,	41328,	23755,	20800,	6447,	7970,	2803,	33262,	39843,	-1},
	{5363,	22469,	38091,	28457,	36696,	34471,	23619,	2404,	24229,	41754,	1297,	18563,	-1},
	{3673,	39070,	14480,	30279,	37483,	7580,	29519,	30519,	39831,	20252,	18132,	20010,	-1},
	{34386,	7252,	27526,	12950,	6875,	43020,	31566,	39069,	18985,	15541,	40020,	16715,	-1},
	{1721,	37332,	39953,	17430,	32134,	29162,	10490,	12971,	28581,	29331,	6489,	35383,	-1},
	{736,	7022,	42349,	8783,	6767,	11871,	21675,	10325,	11548,	25978,	431,	24085,	-1},
	{1925,	10602,	28585,	12170,	15156,	34404,	8351,	13273,	20208,	5800,	15367,	21764,	-1},
	{16279,	37832,	34792,	21250,	34192,	7406,	41488,	18346,	29227,	26127,	25493,	7048,	-1},
	{39948,	28229,	24899,	-1},
	{17408,	14274,	38993,	-1},
	{38774,	15968,	28459,	-1},
	{41404,	27249,	27425,	-1},
	{41229,	6082,	43114,	-1},
	{13957,	4979,	40654,	-1},
	{3093,	3438,	34992,	-1},
	{34082,	6172,	28760,	-1},
	{42210,	34141,	41021,	-1},
	{14705,	17783,	10134,	-1},
	{41755,	39884,	22773,	-1},
	{14615,	15593,	1642,	-1},
	{29111,	37061,	39860,	-1},
	{9579,	33552,	633,	-1},
	{12951,	21137,	39608,	-1},
	{38244,	27361,	29417,	-1},
	{2939,	10172,	36479,	-1},
	{29094,	5357,	19224,	-1},
	{9562,	24436,	28637,	-1},
	{40177,	2326,	13504,	-1},
	{6834,	21583,	42516,	-1},
	{40651,	42810,	25709,	-1},
	{31557,	32138,	38142,	-1},
	{18624,	41867,	39296,	-1},
	{37560,	14295,	16245,	-1},
	{6821,	21679,	31570,	-1},
	{25339,	25083,	22081,	-1},
	{8047,	697,	35268,	-1},
	{9884,	17073,	19995,	-1},
	{26848,	35245,	8390,	-1},
	{18658,	16134,	14807,	-1},
	{12201,	32944,	5035,	-1},
	{25236,	1216,	38986,	-1},
	{42994,	24782,	8681,	-1},
	{28321,	4932,	34249,	-1},
	{4107,	29382,	32124,	-1},
	{22157,	2624,	14468,	-1},
	{38788,	27081,	7936,	-1},
	{4368,	26148,	10578,	-1},
	{25353,	4122,	39751,	-1}
};
/*
 * Normal FEC frame 2/5
 */
const int
Dvb_s2::Ldpc::_acc_addr_table_normal_2_5[][13] = {
	{31413,	18834,	28884,	947,	23050,	14484,	14809,	4968,	455,	33659,	16666,	19008,	-1},
	{13172,	19939,	13354,	13719,	6132,	20086,	34040,	13442,	27958,	16813,	29619,	16553,	-1},
	{1499,	32075,	14962,	11578,	11204,	9217,	10485,	23062,	30936,	17892,	24204,	24885,	-1},
	{32490,	18086,	18007,	4957,	7285,	32073,	19038,	7152,	12486,	13483,	24808,	21759,	-1},
	{32321,	10839,	15620,	33521,	23030,	10646,	26236,	19744,	21713,	36784,	8016,	12869,	-1},
	{35597,	11129,	17948,	26160,	14729,	31943,	20416,	10000,	7882,	31380,	27858,	33356,	-1},
	{14125,	12131,	36199,	4058,	35992,	36594,	33698,	15475,	1566,	18498,	12725,	7067,	-1},
	{17406,	8372,	35437,	2888,	1184,	30068,	25802,	11056,	5507,	26313,	32205,	37232,	-1},
	{15254,	5365,	17308,	22519,	35009,	718,	5240,	16778,	23131,	24092,	20587,	33385,	-1},
	{27455,	17602,	4590,	21767,	22266,	27357,	30400,	8732,	5596,	3060,	33703,	3596,	-1},
	{6882,	873,	10997,	24738,	20770,	10067,	13379,	27409,	25463,	2673,	6998,	31378,	-1},
	{15181,	13645,	34501,	3393,	3840,	35227,	15562,	23615,	38342,	12139,	19471,	15483,	-1},
	{13350,	6707,	23709,	37204,	25778,	21082,	7511,	14588,	10010,	21854,	28375,	33591,	-1},
	{12514,	4695,	37190,	21379,	18723,	5802,	7182,	2529,	29936,	35860,	28338,	10835,	-1},
	{34283,	25610,	33026,	31017,	21259,	2165,	21807,	37578,	1175,	16710,	21939,	30841,	-1},
	{27292,	33730,	6836,	26476,	27539,	35784,	18245,	16394,	17939,	23094,	19216,	17432,	-1},
	{11655,	6183,	38708,	28408,	35157,	17089,	13998,	36029,	15052,	16617,	5638,	36464,	-1},
	{15693,	28923,	26245,	9432,	11675,	25720,	26405,	5838,	31851,	26898,	8090,	37037,	-1},
	{24418,	27583,	7959,	35562,	37771,	17784,	11382,	11156,	37855,	7073,	21685,	34515,	-1},
	{10977,	13633,	30969,	7516,	11943,	18199,	5231,	13825,	19589,	23661,	11150,	35602,	-1},
	{19124,	30774,	6670,	37344,	16510,	26317,	23518,	22957,	6348,	34069,	8845,	20175,	-1},
	{34985,	14441,	25668,	4116,	3019,	21049,	37308,	24551,	24727,	20104,	24850,	12114,	-1},
	{38187,	28527,	13108,	13985,	1425,	21477,	30807,	8613,	26241,	33368,	35913,	32477,	-1},
	{5903,	34390,	24641,	26556,	23007,	27305,	38247,	2621,	9122,	32806,	21554,	18685,	-1},
	{17287,	27292,	19033,	-1},
	{25796,	31795,	12152,	-1},
	{12184,	35088,	31226,	-1},
	{38263,	33386,	24892,	-1},
	{23114,	37995,	29796,	-1},
	{34336,	10551,	36245,	-1},
	{35407,	175,	7203,	-1},
	{14654,	38201,	22605,	-1},
	{28404,	6595,	1018,	-1},
	{19932,	3524,	29305,	-1},
	{31749,	20247,	8128,	-1},
	{18026,	36357,	26735,	-1},
	{7543,	29767,	13588,	-1},
	{13333,	25965,	8463,	-1},
	{14504,	36796,	19710,	-1},
	{4528,	25299,	7318,	-1},
	{35091,	25550,	14798,	-1},
	{7824,	215,	1248,	-1},
	{30848,	5362,	17291,	-1},
	{28932,	30249,	27073,	-1},
	{13062,	2103,	16206,	-1},
	{7129,	32062,	19612,	-1},
	{9512,	21936,	38833,	-1},
	{35849,	33754,	23450,	-1},
	{18705,	28656,	18111,	-1},
	{22749,	27456,	32187,	-1},
	{28229,	31684,	30160,	-1},
	{15293,	8483,	28002,	-1},
	{14880,	13334,	12584,	-1},
	{28646,	2558,	19687,	-1},
	{6259,	4499,	26336,	-1},
	{11952,	28386,	8405,	-1},
	{10609,	961,	7582,	-1},
	{10423,	13191,	26818,	-1},
	{15922,	36654,	21450,	-1},
	{10492,	1532,	1205,	-1},
	{30551,	36482,	22153,	-1},
	{5156,	11330,	34243,	-1},
	{28616,	35369,	13322,	-1},
	{8962,	1485,	21186,	-1},
	{23541,	17445,	35561,	-1},
	{33133,	11593,	19895,	-1},
	{33917,	7863,	33651,	-1},
	{20063,	28331,	10702,	-1},
	{13195,	21107,	21859,	-1},
	{4364,	31137,	4804,	-1},
	{5585,	2037,	4830,	-1},
	{30672,	16927,	14800,	-1}
};
/*
 * Normal FEC frame 1/2
 */
const int
Dvb_s2::Ldpc::_acc_addr_table_normal_1_2[][9] = {
	{54,	9318,	14392,	27561,	26909,	10219,	2534,	8597,	-1},
	{55,	7263,	4635,	2530,	28130,	3033,	23830,	3651,	-1},
	{56,	24731,	23583,	26036,	17299,	5750,	792,	9169,	-1},
	{57,	5811,	26154,	18653,	11551,	15447,	13685,	16264,	-1},
	{58,	12610,	11347,	28768,	2792,	3174,	29371,	12997,	-1},
	{59,	16789,	16018,	21449,	6165,	21202,	15850,	3186,	-1},
	{60,	31016,	21449,	17618,	6213,	12166,	8334,	18212,	-1},
	{61,	22836,	14213,	11327,	5896,	718,	11727,	9308,	-1},
	{62,	2091,	24941,	29966,	23634,	9013,	15587,	5444,	-1},
	{63,	22207,	3983,	16904,	28534,	21415,	27524,	25912,	-1},
	{64,	25687,	4501,	22193,	14665,	14798,	16158,	5491,	-1},
	{65,	4520,	17094,	23397,	4264,	22370,	16941,	21526,	-1},
	{66,	10490,	6182,	32370,	9597,	30841,	25954,	2762,	-1},
	{67,	22120,	22865,	29870,	15147,	13668,	14955,	19235,	-1},
	{68,	6689,	18408,	18346,	9918,	25746,	5443,	20645,	-1},
	{69,	29982,	12529,	13858,	4746,	30370,	10023,	24828,	-1},
	{70,	1262,	28032,	29888,	13063,	24033,	21951,	7863,	-1},
	{71,	6594,	29642,	31451,	14831,	9509,	9335,	31552,	-1},
	{72,	1358,	6454,	16633,	20354,	24598,	624,	5265,	-1},
	{73,	19529,	295,	18011,	3080,	13364,	8032,	15323,	-1},
	{74,	11981,	1510,	7960,	21462,	9129,	11370,	25741,	-1},
	{75,	9276,	29656,	4543,	30699,	20646,	21921,	28050,	-1},
	{76,	15975,	25634,	5520,	31119,	13715,	21949,	19605,	-1},
	{77,	18688,	4608,	31755,	30165,	13103,	10706,	29224,	-1},
	{78,	21514,	23117,	12245,	26035,	31656,	25631,	30699,	-1},
	{79,	9674,	24966,	31285,	29908,	17042,	24588,	31857,	-1},
	{80,	21856,	27777,	29919,	27000,	14897,	11409,	7122,	-1},
	{81,	29773,	23310,	263,	4877,	28622,	20545,	22092,	-1},
	{82,	15605,	5651,	21864,	3967,	14419,	22757,	15896,	-1},
	{83,	30145,	1759,	10139,	29223,	26086,	10556,	5098,	-1},
	{84,	18815,	16575,	2936,	24457,	26738,	6030,	505,	-1},
	{85,	30326,	22298,	27562,	20131,	26390,	6247,	24791,	-1},
	{86,	928,	29246,	21246,	12400,	15311,	32309,	18608,	-1},
	{87,	20314,	6025,	26689,	16302,	2296,	3244,	19613,	-1},
	{88,	6237,	11943,	22851,	15642,	23857,	15112,	20947,	-1},
	{89,	26403,	25168,	19038,	18384,	8882,	12719,	7093,	-1},
	{0,	14567,	24965,	-1},
	{1,	3908,	100,	-1},
	{2,	10279,	240,	-1},
	{3,	24102,	764,	-1},
	{4,	12383,	4173,	-1},
	{5,	13861,	15918,	-1},
	{6,	21327,	1046,	-1},
	{7,	5288,	14579,	-1},
	{8,	28158,	8069,	-1},
	{9,	16583,	11098,	-1},
	{10,	16681,	28363,	-1},
	{11,	13980,	24725,	-1},
	{12,	32169,	17989,	-1},
	{13,	10907,	2767,	-1},
	{14,	21557,	3818,	-1},
	{15,	26676,	12422,	-1},
	{16,	7676,	8754,	-1},
	{17,	14905,	20232,	-1},
	{18,	15719,	24646,	-1},
	{19,	31942,	8589,	-1},
	{20,	19978,	27197,	-1},
	{21,	27060,	15071,	-1},
	{22,	6071,	26649,	-1},
	{23,	10393,	11176,	-1},
	{24,	9597,	13370,	-1},
	{25,	7081,	17677,	-1},
	{26,	1433,	19513,	-1},
	{27,	26925,	9014,	-1},
	{28,	19202,	8900,	-1},
	{29,	18152,	30647,	-1},
	{30,	20803,	1737,	-1},
	{31,	11804,	25221,	-1},
	{32,	31683,	17783,	-1},
	{33,	29694,	9345,	-1},
	{34,	12280,	26611,	-1},
	{35,	6526,	26122,	-1},
	{36,	26165,	11241,	-1},
	{37,	7666,	26962,	-1},
	{38,	16290,	8480,	-1},
	{39,	11774,	10120,	-1},
	{40,	30051,	30426,	-1},
	{41,	1335,	15424,	-1},
	{42,	6865,	17742,	-1},
	{43,	31779,	12489,	-1},
	{44,	32120,	21001,	-1},
	{45,	14508,	6996,	-1},
	{46,	979,	25024,	-1},
	{47,	4554,	21896,	-1},
	{48,	7989,	21777,	-1},
	{49,	4972,	20661,	-1},
	{50,	6612,	2730,	-1},
	{51,	12742,	4418,	-1},
	{52,	29194,	595,	-1},
	{53,	19267,	20113,	-1}
};
/*
 * Normal FEC frame 3/5
 */
const int
Dvb_s2::Ldpc::_acc_addr_table_normal_3_5[][13] = {
	{22422,	10282,	11626,	19997,	11161,	2922,	3122,	99,	5625,	17064,	8270,	179,	-1},
	{25087,	16218,	17015,	828,	20041,	25656,	4186,	11629,	22599,	17305,	22515,	6463,	-1},
	{11049,	22853,	25706,	14388,	5500,	19245,	8732,	2177,	13555,	11346,	17265,	3069,	-1},
	{16581,	22225,	12563,	19717,	23577,	11555,	25496,	6853,	25403,	5218,	15925,	21766,	-1},
	{16529,	14487,	7643,	10715,	17442,	11119,	5679,	14155,	24213,	21000,	1116,	15620,	-1},
	{5340,	8636,	16693,	1434,	5635,	6516,	9482,	20189,	1066,	15013,	25361,	14243,	-1},
	{18506,	22236,	20912,	8952,	5421,	15691,	6126,	21595,	500,	6904,	13059,	6802,	-1},
	{8433,	4694,	5524,	14216,	3685,	19721,	25420,	9937,	23813,	9047,	25651,	16826,	-1},
	{21500,	24814,	6344,	17382,	7064,	13929,	4004,	16552,	12818,	8720,	5286,	2206,	-1},
	{22517,	2429,	19065,	2921,	21611,	1873,	7507,	5661,	23006,	23128,	20543,	19777,	-1},
	{1770,	4636,	20900,	14931,	9247,	12340,	11008,	12966,	4471,	2731,	16445,	791,	-1},
	{6635,	14556,	18865,	22421,	22124,	12697,	9803,	25485,	7744,	18254,	11313,	9004,	-1},
	{19982,	23963,	18912,	7206,	12500,	4382,	20067,	6177,	21007,	1195,	23547,	24837,	-1},
	{756,	11158,	14646,	20534,	3647,	17728,	11676,	11843,	12937,	4402,	8261,	22944,	-1},
	{9306,	24009,	10012,	11081,	3746,	24325,	8060,	19826,	842,	8836,	2898,	5019,	-1},
	{7575,	7455,	25244,	4736,	14400,	22981,	5543,	8006,	24203,	13053,	1120,	5128,	-1},
	{3482,	9270,	13059,	15825,	7453,	23747,	3656,	24585,	16542,	17507,	22462,	14670,	-1},
	{15627,	15290,	4198,	22748,	5842,	13395,	23918,	16985,	14929,	3726,	25350,	24157,	-1},
	{24896,	16365,	16423,	13461,	16615,	8107,	24741,	3604,	25904,	8716,	9604,	20365,	-1},
	{3729,	17245,	18448,	9862,	20831,	25326,	20517,	24618,	13282,	5099,	14183,	8804,	-1},
	{16455,	17646,	15376,	18194,	25528,	1777,	6066,	21855,	14372,	12517,	4488,	17490,	-1},
	{1400,	8135,	23375,	20879,	8476,	4084,	12936,	25536,	22309,	16582,	6402,	24360,	-1},
	{25119,	23586,	128,	4761,	10443,	22536,	8607,	9752,	25446,	15053,	1856,	4040,	-1},
	{377,	21160,	13474,	5451,	17170,	5938,	10256,	11972,	24210,	17833,	22047,	16108,	-1},
	{13075,	9648,	24546,	13150,	23867,	7309,	19798,	2988,	16858,	4825,	23950,	15125,	-1},
	{20526,	3553,	11525,	23366,	2452,	17626,	19265,	20172,	18060,	24593,	13255,	1552,	-1},
	{18839,	21132,	20119,	15214,	14705,	7096,	10174,	5663,	18651,	19700,	12524,	14033,	-1},
	{4127,	2971,	17499,	16287,	22368,	21463,	7943,	18880,	5567,	8047,	23363,	6797,	-1},
	{10651,	24471,	14325,	4081,	7258,	4949,	7044,	1078,	797,	22910,	20474,	4318,	-1},
	{21374,	13231,	22985,	5056,	3821,	23718,	14178,	9978,	19030,	23594,	8895,	25358,	-1},
	{6199,	22056,	7749,	13310,	3999,	23697,	16445,	22636,	5225,	22437,	24153,	9442,	-1},
	{7978,	12177,	2893,	20778,	3175,	8645,	11863,	24623,	10311,	25767,	17057,	3691,	-1},
	{20473,	11294,	9914,	22815,	2574,	8439,	3699,	5431,	24840,	21908,	16088,	18244,	-1},
	{8208,	5755,	19059,	8541,	24924,	6454,	11234,	10492,	16406,	10831,	11436,	9649,	-1},
	{16264,	11275,	24953,	2347,	12667,	19190,	7257,	7174,	24819,	2938,	2522,	11749,	-1},
	{3627,	5969,	13862,	1538,	23176,	6353,	2855,	17720,	2472,	7428,	573,	15036,	-1},
	{0,	18539,	18661,	-1},
	{1,	10502,	3002,	-1},
	{2,	9368,	10761,	-1},
	{3,	12299,	7828,	-1},
	{4,	15048,	13362,	-1},
	{5,	18444,	24640,	-1},
	{6,	20775,	19175,	-1},
	{7,	18970,	10971,	-1},
	{8,	5329,	19982,	-1},
	{9,	11296,	18655,	-1},
	{10,	15046,	20659,	-1},
	{11,	7300,	22140,	-1},
	{12,	22029,	14477,	-1},
	{13,	11129,	742,	-1},
	{14,	13254,	13813,	-1},
	{15,	19234,	13273,	-1},
	{16,	6079,	21122,	-1},
	{17,	22782,	5828,	-1},
	{18,	19775,	4247,	-1},
	{19,	1660,	19413,	-1},
	{20,	4403,	3649,	-1},
	{21,	13371,	25851,	-1},
	{22,	22770,	21784,	-1},
	{23,	10757,	14131,	-1},
	{24,	16071,	21617,	-1},
	{25,	6393,	3725,	-1},
	{26,	597,	19968,	-1},
	{27,	5743,	8084,	-1},
	{28,	6770,	9548,	-1},
	{29,	4285,	17542,	-1},
	{30,	13568,	22599,	-1},
	{31,	1786,	4617,	-1},
	{32,	23238,	11648,	-1},
	{33,	19627,	2030,	-1},
	{34,	13601,	13458,	-1},
	{35,	13740,	17328,	-1},
	{36,	25012,	13944,	-1},
	{37,	22513,	6687,	-1},
	{38,	4934,	12587,	-1},
	{39,	21197,	5133,	-1},
	{40,	22705,	6938,	-1},
	{41,	7534,	24633,	-1},
	{42,	24400,	12797,	-1},
	{43,	21911,	25712,	-1},
	{44,	12039,	1140,	-1},
	{45,	24306,	1021,	-1},
	{46,	14012,	20747,	-1},
	{47,	11265,	15219,	-1},
	{48,	4670,	15531,	-1},
	{49,	9417,	14359,	-1},
	{50,	2415,	6504,	-1},
	{51,	24964,	24690,	-1},
	{52,	14443,	8816,	-1},
	{53,	6926,	1291,	-1},
	{54,	6209,	20806,	-1},
	{55,	13915,	4079,	-1},
	{56,	24410,	13196,	-1},
	{57,	13505,	6117,	-1},
	{58,	9869,	8220,	-1},
	{59,	1570,	6044,	-1},
	{60,	25780,	17387,	-1},
	{61,	20671,	24913,	-1},
	{62,	24558,	20591,	-1},
	{63,	12402,	3702,	-1},
	{64,	8314,	1357,	-1},
	{65,	20071,	14616,	-1},
	{66,	17014,	3688,	-1},
	{67,	19837,	946,	-1},
	{68,	15195,	12136,	-1},
	{69,	7758,	22808,	-1},
	{70,	3564,	2925,	-1},
	{71,	3434,	7769,	-1}
};
/*
 * Normal FEC frame 2/3
 */
const int
Dvb_s2::Ldpc::_acc_addr_table_normal_2_3[][14] = {
	{0,	10491,	16043,	506,	12826,	8065,	8226,	2767,	240,	18673,	9279,	10579,	20928,	-1},
	{1,	17819,	8313,	6433,	6224,	5120,	5824,	12812,	17187,	9940,	13447,	13825,	18483,	-1},
	{2,	17957,	6024,	8681,	18628,	12794,	5915,	14576,	10970,	12064,	20437,	4455,	7151,	-1},
	{3,	19777,	6183,	9972,	14536,	8182,	17749,	11341,	5556,	4379,	17434,	15477,	18532,	-1},
	{4,	4651,	19689,	1608,	659,	16707,	14335,	6143,	3058,	14618,	17894,	20684,	5306,	-1},
	{5,	9778,	2552,	12096,	12369,	15198,	16890,	4851,	3109,	1700,	18725,	1997,	15882,	-1},
	{6,	486,	6111,	13743,	11537,	5591,	7433,	15227,	14145,	1483,	3887,	17431,	12430,	-1},
	{7,	20647,	14311,	11734,	4180,	8110,	5525,	12141,	15761,	18661,	18441,	10569,	8192,	-1},
	{8,	3791,	14759,	15264,	19918,	10132,	9062,	10010,	12786,	10675,	9682,	19246,	5454,	-1},
	{9,	19525,	9485,	7777,	19999,	8378,	9209,	3163,	20232,	6690,	16518,	716,	7353,	-1},
	{10,	4588,	6709,	20202,	10905,	915,	4317,	11073,	13576,	16433,	368,	3508,	21171,	-1},
	{11,	14072,	4033,	19959,	12608,	631,	19494,	14160,	8249,	10223,	21504,	12395,	4322,	-1},
	{12,	13800,	14161,	-1},
	{13,	2948,	9647,	-1},
	{14,	14693,	16027,	-1},
	{15,	20506,	11082,	-1},
	{16,	1143,	9020,	-1},
	{17,	13501,	4014,	-1},
	{18,	1548,	2190,	-1},
	{19,	12216,	21556,	-1},
	{20,	2095,	19897,	-1},
	{21,	4189,	7958,	-1},
	{22,	15940,	10048,	-1},
	{23,	515,	12614,	-1},
	{24,	8501,	8450,	-1},
	{25,	17595,	16784,	-1},
	{26,	5913,	8495,	-1},
	{27,	16394,	10423,	-1},
	{28,	7409,	6981,	-1},
	{29,	6678,	15939,	-1},
	{30,	20344,	12987,	-1},
	{31,	2510,	14588,	-1},
	{32,	17918,	6655,	-1},
	{33,	6703,	19451,	-1},
	{34,	496,	4217,	-1},
	{35,	7290,	5766,	-1},
	{36,	10521,	8925,	-1},
	{37,	20379,	11905,	-1},
	{38,	4090,	5838,	-1},
	{39,	19082,	17040,	-1},
	{40,	20233,	12352,	-1},
	{41,	19365,	19546,	-1},
	{42,	6249,	19030,	-1},
	{43,	11037,	19193,	-1},
	{44,	19760,	11772,	-1},
	{45,	19644,	7428,	-1},
	{46,	16076,	3521,	-1},
	{47,	11779,	21062,	-1},
	{48,	13062,	9682,	-1},
	{49,	8934,	5217,	-1},
	{50,	11087,	3319,	-1},
	{51,	18892,	4356,	-1},
	{52,	7894,	3898,	-1},
	{53,	5963,	4360,	-1},
	{54,	7346,	11726,	-1},
	{55,	5182,	5609,	-1},
	{56,	2412,	17295,	-1},
	{57,	9845,	20494,	-1},
	{58,	6687,	1864,	-1},
	{59,	20564,	5216,	-1},
	{0,	18226,	17207,	-1},
	{1,	9380,	8266,	-1},
	{2,	7073,	3065,	-1},
	{3,	18252,	13437,	-1},
	{4,	9161,	15642,	-1},
	{5,	10714,	10153,	-1},
	{6,	11585,	9078,	-1},
	{7,	5359,	9418,	-1},
	{8,	9024,	9515,	-1},
	{9,	1206,	16354,	-1},
	{10,	14994,	1102,	-1},
	{11,	9375,	20796,	-1},
	{12,	15964,	6027,	-1},
	{13,	14789,	6452,	-1},
	{14,	8002,	18591,	-1},
	{15,	14742,	14089,	-1},
	{16,	253,	3045,	-1},
	{17,	1274,	19286,	-1},
	{18,	14777,	2044,	-1},
	{19,	13920,	9900,	-1},
	{20,	452,	7374,	-1},
	{21,	18206,	9921,	-1},
	{22,	6131,	5414,	-1},
	{23,	10077,	9726,	-1},
	{24,	12045,	5479,	-1},
	{25,	4322,	7990,	-1},
	{26,	15616,	5550,	-1},
	{27,	15561,	10661,	-1},
	{28,	20718,	7387,	-1},
	{29,	2518,	18804,	-1},
	{30,	8984,	2600,	-1},
	{31,	6516,	17909,	-1},
	{32,	11148,	98,	-1},
	{33,	20559,	3704,	-1},
	{34,	7510,	1569,	-1},
	{35,	16000,	11692,	-1},
	{36,	9147,	10303,	-1},
	{37,	16650,	191,	-1},
	{38,	15577,	18685,	-1},
	{39,	17167,	20917,	-1},
	{40,	4256,	3391,	-1},
	{41,	20092,	17219,	-1},
	{42,	9218,	5056,	-1},
	{43,	18429,	8472,	-1},
	{44,	12093,	20753,	-1},
	{45,	16345,	12748,	-1},
	{46,	16023,	11095,	-1},
	{47,	5048,	17595,	-1},
	{48,	18995,	4817,	-1},
	{49,	16483,	3536,	-1},
	{50,	1439,	16148,	-1},
	{51,	3661,	3039,	-1},
	{52,	19010,	18121,	-1},
	{53,	8968,	11793,	-1},
	{54,	13427,	18003,	-1},
	{55,	5303,	3083,	-1},
	{56,	531,	16668,	-1},
	{57,	4771,	6722,	-1},
	{58,	5695,	7960,	-1},
	{59,	3589,	14630,	-1}
};
/*
 * Normal FEC frame 3/4
 */
const int
Dvb_s2::Ldpc::_acc_addr_table_normal_3_4[][13] = {
	{0,	6385,	7901,	14611,	13389,	11200,	3252,	5243,	2504,	2722,	821,	7374,	-1},
	{1,	11359,	2698,	357,	13824,	12772,	7244,	6752,	15310,	852,	2001,	11417,	-1},
	{2,	7862,	7977,	6321,	13612,	12197,	14449,	15137,	13860,	1708,	6399,	13444,	-1},
	{3,	1560,	11804,	6975,	13292,	3646,	3812,	8772,	7306,	5795,	14327,	7866,	-1},
	{4,	7626,	11407,	14599,	9689,	1628,	2113,	10809,	9283,	1230,	15241,	4870,	-1},
	{5,	1610,	5699,	15876,	9446,	12515,	1400,	6303,	5411,	14181,	13925,	7358,	-1},
	{6,	4059,	8836,	3405,	7853,	7992,	15336,	5970,	10368,	10278,	9675,	4651,	-1},
	{7,	4441,	3963,	9153,	2109,	12683,	7459,	12030,	12221,	629,	15212,	406,	-1},
	{8,	6007,	8411,	5771,	3497,	543,	14202,	875,	9186,	6235,	13908,	3563,	-1},
	{9,	3232,	6625,	4795,	546,	9781,	2071,	7312,	3399,	7250,	4932,	12652,	-1},
	{10,	8820,	10088,	11090,	7069,	6585,	13134,	10158,	7183,	488,	7455,	9238,	-1},
	{11,	1903,	10818,	119,	215,	7558,	11046,	10615,	11545,	14784,	7961,	15619,	-1},
	{12,	3655,	8736,	4917,	15874,	5129,	2134,	15944,	14768,	7150,	2692,	1469,	-1},
	{13,	8316,	3820,	505,	8923,	6757,	806,	7957,	4216,	15589,	13244,	2622,	-1},
	{14,	14463,	4852,	15733,	3041,	11193,	12860,	13673,	8152,	6551,	15108,	8758,	-1},
	{15,	3149,	11981,	-1},
	{16,	13416,	6906,	-1},
	{17,	13098,	13352,	-1},
	{18,	2009,	14460,	-1},
	{19,	7207,	4314,	-1},
	{20,	3312,	3945,	-1},
	{21,	4418,	6248,	-1},
	{22,	2669,	13975,	-1},
	{23,	7571,	9023,	-1},
	{24,	14172,	2967,	-1},
	{25,	7271,	7138,	-1},
	{26,	6135,	13670,	-1},
	{27,	7490,	14559,	-1},
	{28,	8657,	2466,	-1},
	{29,	8599,	12834,	-1},
	{30,	3470,	3152,	-1},
	{31,	13917,	4365,	-1},
	{32,	6024,	13730,	-1},
	{33,	10973,	14182,	-1},
	{34,	2464,	13167,	-1},
	{35,	5281,	15049,	-1},
	{36,	1103,	1849,	-1},
	{37,	2058,	1069,	-1},
	{38,	9654,	6095,	-1},
	{39,	14311,	7667,	-1},
	{40,	15617,	8146,	-1},
	{41,	4588,	11218,	-1},
	{42,	13660,	6243,	-1},
	{43,	8578,	7874,	-1},
	{44,	11741,	2686,	-1},
	{0,	1022,	1264,	-1},
	{1,	12604,	9965,	-1},
	{2,	8217,	2707,	-1},
	{3,	3156,	11793,	-1},
	{4,	354,	1514,	-1},
	{5,	6978,	14058,	-1},
	{6,	7922,	16079,	-1},
	{7,	15087,	12138,	-1},
	{8,	5053,	6470,	-1},
	{9,	12687,	14932,	-1},
	{10,	15458,	1763,	-1},
	{11,	8121,	1721,	-1},
	{12,	12431,	549,	-1},
	{13,	4129,	7091,	-1},
	{14,	1426,	8415,	-1},
	{15,	9783,	7604,	-1},
	{16,	6295,	11329,	-1},
	{17,	1409,	12061,	-1},
	{18,	8065,	9087,	-1},
	{19,	2918,	8438,	-1},
	{20,	1293,	14115,	-1},
	{21,	3922,	13851,	-1},
	{22,	3851,	4000,	-1},
	{23,	5865,	1768,	-1},
	{24,	2655,	14957,	-1},
	{25,	5565,	6332,	-1},
	{26,	4303,	12631,	-1},
	{27,	11653,	12236,	-1},
	{28,	16025,	7632,	-1},
	{29,	4655,	14128,	-1},
	{30,	9584,	13123,	-1},
	{31,	13987,	9597,	-1},
	{32,	15409,	12110,	-1},
	{33,	8754,	15490,	-1},
	{34,	7416,	15325,	-1},
	{35,	2909,	15549,	-1},
	{36,	2995,	8257,	-1},
	{37,	9406,	4791,	-1},
	{38,	11111,	4854,	-1},
	{39,	2812,	8521,	-1},
	{40,	8476,	14717,	-1},
	{41,	7820,	15360,	-1},
	{42,	1179,	7939,	-1},
	{43,	2357,	8678,	-1},
	{44,	7703,	6216,	-1},
	{0,	3477,	7067,	-1},
	{1,	3931,	13845,	-1},
	{2,	7675,	12899,	-1},
	{3,	1754,	8187,	-1},
	{4,	7785,	1400,	-1},
	{5,	9213,	5891,	-1},
	{6,	2494,	7703,	-1},
	{7,	2576,	7902,	-1},
	{8,	4821,	15682,	-1},
	{9,	10426,	11935,	-1},
	{10,	1810,	904,	-1},
	{11,	11332,	9264,	-1},
	{12,	11312,	3570,	-1},
	{13,	14916,	2650,	-1},
	{14,	7679,	7842,	-1},
	{15,	6089,	13084,	-1},
	{16,	3938,	2751,	-1},
	{17,	8509,	4648,	-1},
	{18,	12204,	8917,	-1},
	{19,	5749,	12443,	-1},
	{20,	12613,	4431,	-1},
	{21,	1344,	4014,	-1},
	{22,	8488,	13850,	-1},
	{23,	1730,	14896,	-1},
	{24,	14942,	7126,	-1},
	{25,	14983,	8863,	-1},
	{26,	6578,	8564,	-1},
	{27,	4947,	396,	-1},
	{28,	297,	12805,	-1},
	{29,	13878,	6692,	-1},
	{30,	11857,	11186,	-1},
	{31,	14395,	11493,	-1},
	{32,	16145,	12251,	-1},
	{33,	13462,	7428,	-1},
	{34,	14526,	13119,	-1},
	{35,	2535,	11243,	-1},
	{36,	6465,	12690,	-1},
	{37,	6872,	9334,	-1},
	{38,	15371,	14023,	-1},
	{39,	8101,	10187,	-1},
	{40,	11963,	4848,	-1},
	{41,	15125,	6119,	-1},
	{42,	8051,	14465,	-1},
	{43,	11139,	5167,	-1},
	{44,	2883,	14521,	-1}
};
/*
 * Normal FEC frame 4/5
 */
const int
Dvb_s2::Ldpc::_acc_addr_table_normal_4_5[][12] = {
	{0,	149,	11212,	5575,	6360,	12559,	8108,	8505,	408,	10026,	12828,	-1},
	{1,	5237,	490,	10677,	4998,	3869,	3734,	3092,	3509,	7703,	10305,	-1},
	{2,	8742,	5553,	2820,	7085,	12116,	10485,	564,	7795,	2972,	2157,	-1},
	{3,	2699,	4304,	8350,	712,	2841,	3250,	4731,	10105,	517,	7516,	-1},
	{4,	12067,	1351,	11992,	12191,	11267,	5161,	537,	6166,	4246,	2363,	-1},
	{5,	6828,	7107,	2127,	3724,	5743,	11040,	10756,	4073,	1011,	3422,	-1},
	{6,	11259,	1216,	9526,	1466,	10816,	940,	3744,	2815,	11506,	11573,	-1},
	{7,	4549,	11507,	1118,	1274,	11751,	5207,	7854,	12803,	4047,	6484,	-1},
	{8,	8430,	4115,	9440,	413,	4455,	2262,	7915,	12402,	8579,	7052,	-1},
	{9,	3885,	9126,	5665,	4505,	2343,	253,	4707,	3742,	4166,	1556,	-1},
	{10,	1704,	8936,	6775,	8639,	8179,	7954,	8234,	7850,	8883,	8713,	-1},
	{11,	11716,	4344,	9087,	11264,	2274,	8832,	9147,	11930,	6054,	5455,	-1},
	{12,	7323,	3970,	10329,	2170,	8262,	3854,	2087,	12899,	9497,	11700,	-1},
	{13,	4418,	1467,	2490,	5841,	817,	11453,	533,	11217,	11962,	5251,	-1},
	{14,	1541,	4525,	7976,	3457,	9536,	7725,	3788,	2982,	6307,	5997,	-1},
	{15,	11484,	2739,	4023,	12107,	6516,	551,	2572,	6628,	8150,	9852,	-1},
	{16,	6070,	1761,	4627,	6534,	7913,	3730,	11866,	1813,	12306,	8249,	-1},
	{17,	12441,	5489,	8748,	7837,	7660,	2102,	11341,	2936,	6712,	11977,	-1},
	{18,	10155,	4210,	-1},
	{19,	1010,	10483,	-1},
	{20,	8900,	10250,	-1},
	{21,	10243,	12278,	-1},
	{22,	7070,	4397,	-1},
	{23,	12271,	3887,	-1},
	{24,	11980,	6836,	-1},
	{25,	9514,	4356,	-1},
	{26,	7137,	10281,	-1},
	{27,	11881,	2526,	-1},
	{28,	1969,	11477,	-1},
	{29,	3044,	10921,	-1},
	{30,	2236,	8724,	-1},
	{31,	9104,	6340,	-1},
	{32,	7342,	8582,	-1},
	{33,	11675,	10405,	-1},
	{34,	6467,	12775,	-1},
	{35,	3186,	12198,	-1},
	{0,	9621,	11445,	-1},
	{1,	7486,	5611,	-1},
	{2,	4319,	4879,	-1},
	{3,	2196,	344,	-1},
	{4,	7527,	6650,	-1},
	{5,	10693,	2440,	-1},
	{6,	6755,	2706,	-1},
	{7,	5144,	5998,	-1},
	{8,	11043,	8033,	-1},
	{9,	4846,	4435,	-1},
	{10,	4157,	9228,	-1},
	{11,	12270,	6562,	-1},
	{12,	11954,	7592,	-1},
	{13,	7420,	2592,	-1},
	{14,	8810,	9636,	-1},
	{15,	689,	5430,	-1},
	{16,	920,	1304,	-1},
	{17,	1253,	11934,	-1},
	{18,	9559,	6016,	-1},
	{19,	312,	7589,	-1},
	{20,	4439,	4197,	-1},
	{21,	4002,	9555,	-1},
	{22,	12232,	7779,	-1},
	{23,	1494,	8782,	-1},
	{24,	10749,	3969,	-1},
	{25,	4368,	3479,	-1},
	{26,	6316,	5342,	-1},
	{27,	2455,	3493,	-1},
	{28,	12157,	7405,	-1},
	{29,	6598,	11495,	-1},
	{30,	11805,	4455,	-1},
	{31,	9625,	2090,	-1},
	{32,	4731,	2321,	-1},
	{33,	3578,	2608,	-1},
	{34,	8504,	1849,	-1},
	{35,	4027,	1151,	-1},
	{0,	5647,	4935,	-1},
	{1,	4219,	1870,	-1},
	{2,	10968,	8054,	-1},
	{3,	6970,	5447,	-1},
	{4,	3217,	5638,	-1},
	{5,	8972,	669,	-1},
	{6,	5618,	12472,	-1},
	{7,	1457,	1280,	-1},
	{8,	8868,	3883,	-1},
	{9,	8866,	1224,	-1},
	{10,	8371,	5972,	-1},
	{11,	266,	4405,	-1},
	{12,	3706,	3244,	-1},
	{13,	6039,	5844,	-1},
	{14,	7200,	3283,	-1},
	{15,	1502,	11282,	-1},
	{16,	12318,	2202,	-1},
	{17,	4523,	965,	-1},
	{18,	9587,	7011,	-1},
	{19,	2552,	2051,	-1},
	{20,	12045,	10306,	-1},
	{21,	11070,	5104,	-1},
	{22,	6627,	6906,	-1},
	{23,	9889,	2121,	-1},
	{24,	829,	9701,	-1},
	{25,	2201,	1819,	-1},
	{26,	6689,	12925,	-1},
	{27,	2139,	8757,	-1},
	{28,	12004,	5948,	-1},
	{29,	8704,	3191,	-1},
	{30,	8171,	10933,	-1},
	{31,	6297,	7116,	-1},
	{32,	616,	7146,	-1},
	{33,	5142,	9761,	-1},
	{34,	10377,	8138,	-1},
	{35,	7616,	5811,	-1},
	{0,	7285,	9863,	-1},
	{1,	7764,	10867,	-1},
	{2,	12343,	9019,	-1},
	{3,	4414,	8331,	-1},
	{4,	3464,	642,	-1},
	{5,	6960,	2039,	-1},
	{6,	786,	3021,	-1},
	{7,	710,	2086,	-1},
	{8,	7423,	5601,	-1},
	{9,	8120,	4885,	-1},
	{10,	12385,	11990,	-1},
	{11,	9739,	10034,	-1},
	{12,	424,	10162,	-1},
	{13,	1347,	7597,	-1},
	{14,	1450,	112,	-1},
	{15,	7965,	8478,	-1},
	{16,	8945,	7397,	-1},
	{17,	6590,	8316,	-1},
	{18,	6838,	9011,	-1},
	{19,	6174,	9410,	-1},
	{20,	255,	113,	-1},
	{21,	6197,	5835,	-1},
	{22,	12902,	3844,	-1},
	{23,	4377,	3505,	-1},
	{24,	5478,	8672,	-1},
	{25,	4453,	2132,	-1},
	{26,	9724,	1380,	-1},
	{27,	12131,	11526,	-1},
	{28,	12323,	9511,	-1},
	{29,	8231,	1752,	-1},
	{30,	497,	9022,	-1},
	{31,	9288,	3080,	-1},
	{32,	2481,	7515,	-1},
	{33,	2696,	268,	-1},
	{34,	4023,	12341,	-1},
	{35,	7108,	5553,	-1}
};
/*
 * Normal FEC frame 5/6
 */
const int
Dvb_s2::Ldpc::_acc_addr_table_normal_5_6[][14] = {
	{0,	4362,	416,	8909,	4156,	3216,	3112,	2560,	2912,	6405,	8593,	4969,	6723,	-1},
	{1,	2479,	1786,	8978,	3011,	4339,	9313,	6397,	2957,	7288,	5484,	6031,	10217,	-1},
	{2,	10175,	9009,	9889,	3091,	4985,	7267,	4092,	8874,	5671,	2777,	2189,	8716,	-1},
	{3,	9052,	4795,	3924,	3370,	10058,	1128,	9996,	10165,	9360,	4297,	434,	5138,	-1},
	{4,	2379,	7834,	4835,	2327,	9843,	804,	329,	8353,	7167,	3070,	1528,	7311,	-1},
	{5,	3435,	7871,	348,	3693,	1876,	6585,	10340,	7144,	5870,	2084,	4052,	2780,	-1},
	{6,	3917,	3111,	3476,	1304,	10331,	5939,	5199,	1611,	1991,	699,	8316,	9960,	-1},
	{7,	6883,	3237,	1717,	10752,	7891,	9764,	4745,	3888,	10009,	4176,	4614,	1567,	-1},
	{8,	10587,	2195,	1689,	2968,	5420,	2580,	2883,	6496,	111,	6023,	1024,	4449,	-1},
	{9,	3786,	8593,	2074,	3321,	5057,	1450,	3840,	5444,	6572,	3094,	9892,	1512,	-1},
	{10,	8548,	1848,	10372,	4585,	7313,	6536,	6379,	1766,	9462,	2456,	5606,	9975,	-1},
	{11,	8204,	10593,	7935,	3636,	3882,	394,	5968,	8561,	2395,	7289,	9267,	9978,	-1},
	{12,	7795,	74,	1633,	9542,	6867,	7352,	6417,	7568,	10623,	725,	2531,	9115,	-1},
	{13,	7151,	2482,	4260,	5003,	10105,	7419,	9203,	6691,	8798,	2092,	8263,	3755,	-1},
	{14,	3600,	570,	4527,	200,	9718,	6771,	1995,	8902,	5446,	768,	1103,	6520,	-1},
	{15,	6304,	7621,	-1},
	{16,	6498,	9209,	-1},
	{17,	7293,	6786,	-1},
	{18,	5950,	1708,	-1},
	{19,	8521,	1793,	-1},
	{20,	6174,	7854,	-1},
	{21,	9773,	1190,	-1},
	{22,	9517,	10268,	-1},
	{23,	2181,	9349,	-1},
	{24,	1949,	5560,	-1},
	{25,	1556,	555,	-1},
	{26,	8600,	3827,	-1},
	{27,	5072,	1057,	-1},
	{28,	7928,	3542,	-1},
	{29,	3226,	3762,	-1},
	{0,	7045,	2420,	-1},
	{1,	9645,	2641,	-1},
	{2,	2774,	2452,	-1},
	{3,	5331,	2031,	-1},
	{4,	9400,	7503,	-1},
	{5,	1850,	2338,	-1},
	{6,	10456,	9774,	-1},
	{7,	1692,	9276,	-1},
	{8,	10037,	4038,	-1},
	{9,	3964,	338,	-1},
	{10,	2640,	5087,	-1},
	{11,	858,	3473,	-1},
	{12,	5582,	5683,	-1},
	{13,	9523,	916,	-1},
	{14,	4107,	1559,	-1},
	{15,	4506,	3491,	-1},
	{16,	8191,	4182,	-1},
	{17,	10192,	6157,	-1},
	{18,	5668,	3305,	-1},
	{19,	3449,	1540,	-1},
	{20,	4766,	2697,	-1},
	{21,	4069,	6675,	-1},
	{22,	1117,	1016,	-1},
	{23,	5619,	3085,	-1},
	{24,	8483,	8400,	-1},
	{25,	8255,	394,	-1},
	{26,	6338,	5042,	-1},
	{27,	6174,	5119,	-1},
	{28,	7203,	1989,	-1},
	{29,	1781,	5174,	-1},
	{0,	1464,	3559,	-1},
	{1,	3376,	4214,	-1},
	{2,	7238,	67,	-1},
	{3,	10595,	8831,	-1},
	{4,	1221,	6513,	-1},
	{5,	5300,	4652,	-1},
	{6,	1429,	9749,	-1},
	{7,	7878,	5131,	-1},
	{8,	4435,	10284,	-1},
	{9,	6331,	5507,	-1},
	{10,	6662,	4941,	-1},
	{11,	9614,	10238,	-1},
	{12,	8400,	8025,	-1},
	{13,	9156,	5630,	-1},
	{14,	7067,	8878,	-1},
	{15,	9027,	3415,	-1},
	{16,	1690,	3866,	-1},
	{17,	2854,	8469,	-1},
	{18,	6206,	630,	-1},
	{19,	363,	5453,	-1},
	{20,	4125,	7008,	-1},
	{21,	1612,	6702,	-1},
	{22,	9069,	9226,	-1},
	{23,	5767,	4060,	-1},
	{24,	3743,	9237,	-1},
	{25,	7018,	5572,	-1},
	{26,	8892,	4536,	-1},
	{27,	853,	6064,	-1},
	{28,	8069,	5893,	-1},
	{29,	2051,	2885,	-1},
	{0,	10691,	3153,	-1},
	{1,	3602,	4055,	-1},
	{2,	328,	1717,	-1},
	{3,	2219,	9299,	-1},
	{4,	1939,	7898,	-1},
	{5,	617,	206,	-1},
	{6,	8544,	1374,	-1},
	{7,	10676,	3240,	-1},
	{8,	6672,	9489,	-1},
	{9,	3170,	7457,	-1},
	{10,	7868,	5731,	-1},
	{11,	6121,	10732,	-1},
	{12,	4843,	9132,	-1},
	{13,	580,	9591,	-1},
	{14,	6267,	9290,	-1},
	{15,	3009,	2268,	-1},
	{16,	195,	2419,	-1},
	{17,	8016,	1557,	-1},
	{18,	1516,	9195,	-1},
	{19,	8062,	9064,	-1},
	{20,	2095,	8968,	-1},
	{21,	753,	7326,	-1},
	{22,	6291,	3833,	-1},
	{23,	2614,	7844,	-1},
	{24,	2303,	646,	-1},
	{25,	2075,	611,	-1},
	{26,	4687,	362,	-1},
	{27,	8684,	9940,	-1},
	{28,	4830,	2065,	-1},
	{29,	7038,	1363,	-1},
	{0,	1769,	7837,	-1},
	{1,	3801,	1689,	-1},
	{2,	10070,	2359,	-1},
	{3,	3667,	9918,	-1},
	{4,	1914,	6920,	-1},
	{5,	4244,	5669,	-1},
	{6,	10245,	7821,	-1},
	{7,	7648,	3944,	-1},
	{8,	3310,	5488,	-1},
	{9,	6346,	9666,	-1},
	{10,	7088,	6122,	-1},
	{11,	1291,	7827,	-1},
	{12,	10592,	8945,	-1},
	{13,	3609,	7120,	-1},
	{14,	9168,	9112,	-1},
	{15,	6203,	8052,	-1},
	{16,	3330,	2895,	-1},
	{17,	4264,	10563,	-1},
	{18,	10556,	6496,	-1},
	{19,	8807,	7645,	-1},
	{20,	1999,	4530,	-1},
	{21,	9202,	6818,	-1},
	{22,	3403,	1734,	-1},
	{23,	2106,	9023,	-1},
	{24,	6881,	3883,	-1},
	{25,	3895,	2171,	-1},
	{26,	4062,	6424,	-1},
	{27,	3755,	9536,	-1},
	{28,	4683,	2131,	-1},
	{29,	7347,	8027,	-1}
};
/*
 * Normal FEC frame 8/9
 */
const int
Dvb_s2::Ldpc::_acc_addr_table_normal_8_9[][5] = {
	{0,	6235,	2848,	3222,	-1},
	{1,	5800,	3492,	5348,	-1},
	{2,	2757,	927,	90,	-1},
	{3,	6961,	4516,	4739,	-1},
	{4,	1172,	3237,	6264,	-1},
	{5,	1927,	2425,	3683,	-1},
	{6,	3714,	6309,	2495,	-1},
	{7,	3070,	6342,	7154,	-1},
	{8,	2428,	613,	3761,	-1},
	{9,	2906,	264,	5927,	-1},
	{10,	1716,	1950,	4273,	-1},
	{11,	4613,	6179,	3491,	-1},
	{12,	4865,	3286,	6005,	-1},
	{13,	1343,	5923,	3529,	-1},
	{14,	4589,	4035,	2132,	-1},
	{15,	1579,	3920,	6737,	-1},
	{16,	1644,	1191,	5998,	-1},
	{17,	1482,	2381,	4620,	-1},
	{18,	6791,	6014,	6596,	-1},
	{19,	2738,	5918,	3786,	-1},
	{0,	5156,	6166,	-1},
	{1,	1504,	4356,	-1},
	{2,	130,	1904,	-1},
	{3,	6027,	3187,	-1},
	{4,	6718,	759,	-1},
	{5,	6240,	2870,	-1},
	{6,	2343,	1311,	-1},
	{7,	1039,	5465,	-1},
	{8,	6617,	2513,	-1},
	{9,	1588,	5222,	-1},
	{10,	6561,	535,	-1},
	{11,	4765,	2054,	-1},
	{12,	5966,	6892,	-1},
	{13,	1969,	3869,	-1},
	{14,	3571,	2420,	-1},
	{15,	4632,	981,	-1},
	{16,	3215,	4163,	-1},
	{17,	973,	3117,	-1},
	{18,	3802,	6198,	-1},
	{19,	3794,	3948,	-1},
	{0,	3196,	6126,	-1},
	{1,	573,	1909,	-1},
	{2,	850,	4034,	-1},
	{3,	5622,	1601,	-1},
	{4,	6005,	524,	-1},
	{5,	5251,	5783,	-1},
	{6,	172,	2032,	-1},
	{7,	1875,	2475,	-1},
	{8,	497,	1291,	-1},
	{9,	2566,	3430,	-1},
	{10,	1249,	740,	-1},
	{11,	2944,	1948,	-1},
	{12,	6528,	2899,	-1},
	{13,	2243,	3616,	-1},
	{14,	867,	3733,	-1},
	{15,	1374,	4702,	-1},
	{16,	4698,	2285,	-1},
	{17,	4760,	3917,	-1},
	{18,	1859,	4058,	-1},
	{19,	6141,	3527,	-1},
	{0,	2148,	5066,	-1},
	{1,	1306,	145,	-1},
	{2,	2319,	871,	-1},
	{3,	3463,	1061,	-1},
	{4,	5554,	6647,	-1},
	{5,	5837,	339,	-1},
	{6,	5821,	4932,	-1},
	{7,	6356,	4756,	-1},
	{8,	3930,	418,	-1},
	{9,	211,	3094,	-1},
	{10,	1007,	4928,	-1},
	{11,	3584,	1235,	-1},
	{12,	6982,	2869,	-1},
	{13,	1612,	1013,	-1},
	{14,	953,	4964,	-1},
	{15,	4555,	4410,	-1},
	{16,	4925,	4842,	-1},
	{17,	5778,	600,	-1},
	{18,	6509,	2417,	-1},
	{19,	1260,	4903,	-1},
	{0,	3369,	3031,	-1},
	{1,	3557,	3224,	-1},
	{2,	3028,	583,	-1},
	{3,	3258,	440,	-1},
	{4,	6226,	6655,	-1},
	{5,	4895,	1094,	-1},
	{6,	1481,	6847,	-1},
	{7,	4433,	1932,	-1},
	{8,	2107,	1649,	-1},
	{9,	2119,	2065,	-1},
	{10,	4003,	6388,	-1},
	{11,	6720,	3622,	-1},
	{12,	3694,	4521,	-1},
	{13,	1164,	7050,	-1},
	{14,	1965,	3613,	-1},
	{15,	4331,	66,	-1},
	{16,	2970,	1796,	-1},
	{17,	4652,	3218,	-1},
	{18,	1762,	4777,	-1},
	{19,	5736,	1399,	-1},
	{0,	970,	2572,	-1},
	{1,	2062,	6599,	-1},
	{2,	4597,	4870,	-1},
	{3,	1228,	6913,	-1},
	{4,	4159,	1037,	-1},
	{5,	2916,	2362,	-1},
	{6,	395,	1226,	-1},
	{7,	6911,	4548,	-1},
	{8,	4618,	2241,	-1},
	{9,	4120,	4280,	-1},
	{10,	5825,	474,	-1},
	{11,	2154,	5558,	-1},
	{12,	3793,	5471,	-1},
	{13,	5707,	1595,	-1},
	{14,	1403,	325,	-1},
	{15,	6601,	5183,	-1},
	{16,	6369,	4569,	-1},
	{17,	4846,	896,	-1},
	{18,	7092,	6184,	-1},
	{19,	6764,	7127,	-1},
	{0,	6358,	1951,	-1},
	{1,	3117,	6960,	-1},
	{2,	2710,	7062,	-1},
	{3,	1133,	3604,	-1},
	{4,	3694,	657,	-1},
	{5,	1355,	110,	-1},
	{6,	3329,	6736,	-1},
	{7,	2505,	3407,	-1},
	{8,	2462,	4806,	-1},
	{9,	4216,	214,	-1},
	{10,	5348,	5619,	-1},
	{11,	6627,	6243,	-1},
	{12,	2644,	5073,	-1},
	{13,	4212,	5088,	-1},
	{14,	3463,	3889,	-1},
	{15,	5306,	478,	-1},
	{16,	4320,	6121,	-1},
	{17,	3961,	1125,	-1},
	{18,	5699,	1195,	-1},
	{19,	6511,	792,	-1},
	{0,	3934,	2778,	-1},
	{1,	3238,	6587,	-1},
	{2,	1111,	6596,	-1},
	{3,	1457,	6226,	-1},
	{4,	1446,	3885,	-1},
	{5,	3907,	4043,	-1},
	{6,	6839,	2873,	-1},
	{7,	1733,	5615,	-1},
	{8,	5202,	4269,	-1},
	{9,	3024,	4722,	-1},
	{10,	5445,	6372,	-1},
	{11,	370,	1828,	-1},
	{12,	4695,	1600,	-1},
	{13,	680,	2074,	-1},
	{14,	1801,	6690,	-1},
	{15,	2669,	1377,	-1},
	{16,	2463,	1681,	-1},
	{17,	5972,	5171,	-1},
	{18,	5728,	4284,	-1},
	{19,	1696,	1459,	-1}
};
/*
 * Normal FEC frame 9/10
 */
const int
Dvb_s2::Ldpc::_acc_addr_table_normal_9_10[][5] = {
	{0,	5611,	2563,	2900,	-1},
	{1,	5220,	3143,	4813,	-1},
	{2,	2481,	834,	81,	-1},
	{3,	6265,	4064,	4265,	-1},
	{4,	1055,	2914,	5638,	-1},
	{5,	1734,	2182,	3315,	-1},
	{6,	3342,	5678,	2246,	-1},
	{7,	2185,	552,	3385,	-1},
	{8,	2615,	236,	5334,	-1},
	{9,	1546,	1755,	3846,	-1},
	{10,	4154,	5561,	3142,	-1},
	{11,	4382,	2957,	5400,	-1},
	{12,	1209,	5329,	3179,	-1},
	{13,	1421,	3528,	6063,	-1},
	{14,	1480,	1072,	5398,	-1},
	{15,	3843,	1777,	4369,	-1},
	{16,	1334,	2145,	4163,	-1},
	{17,	2368,	5055,	260,	-1},
	{0,	6118,	5405,	-1},
	{1,	2994,	4370,	-1},
	{2,	3405,	1669,	-1},
	{3,	4640,	5550,	-1},
	{4,	1354,	3921,	-1},
	{5,	117,	1713,	-1},
	{6,	5425,	2866,	-1},
	{7,	6047,	683,	-1},
	{8,	5616,	2582,	-1},
	{9,	2108,	1179,	-1},
	{10,	933,	4921,	-1},
	{11,	5953,	2261,	-1},
	{12,	1430,	4699,	-1},
	{13,	5905,	480,	-1},
	{14,	4289,	1846,	-1},
	{15,	5374,	6208,	-1},
	{16,	1775,	3476,	-1},
	{17,	3216,	2178,	-1},
	{0,	4165,	884,	-1},
	{1,	2896,	3744,	-1},
	{2,	874,	2801,	-1},
	{3,	3423,	5579,	-1},
	{4,	3404,	3552,	-1},
	{5,	2876,	5515,	-1},
	{6,	516,	1719,	-1},
	{7,	765,	3631,	-1},
	{8,	5059,	1441,	-1},
	{9,	5629,	598,	-1},
	{10,	5405,	473,	-1},
	{11,	4724,	5210,	-1},
	{12,	155,	1832,	-1},
	{13,	1689,	2229,	-1},
	{14,	449,	1164,	-1},
	{15,	2308,	3088,	-1},
	{16,	1122,	669,	-1},
	{17,	2268,	5758,	-1},
	{0,	5878,	2609,	-1},
	{1,	782,	3359,	-1},
	{2,	1231,	4231,	-1},
	{3,	4225,	2052,	-1},
	{4,	4286,	3517,	-1},
	{5,	5531,	3184,	-1},
	{6,	1935,	4560,	-1},
	{7,	1174,	131,	-1},
	{8,	3115,	956,	-1},
	{9,	3129,	1088,	-1},
	{10,	5238,	4440,	-1},
	{11,	5722,	4280,	-1},
	{12,	3540,	375,	-1},
	{13,	191,	2782,	-1},
	{14,	906,	4432,	-1},
	{15,	3225,	1111,	-1},
	{16,	6296,	2583,	-1},
	{17,	1457,	903,	-1},
	{0,	855,	4475,	-1},
	{1,	4097,	3970,	-1},
	{2,	4433,	4361,	-1},
	{3,	5198,	541,	-1},
	{4,	1146,	4426,	-1},
	{5,	3202,	2902,	-1},
	{6,	2724,	525,	-1},
	{7,	1083,	4124,	-1},
	{8,	2326,	6003,	-1},
	{9,	5605,	5990,	-1},
	{10,	4376,	1579,	-1},
	{11,	4407,	984,	-1},
	{12,	1332,	6163,	-1},
	{13,	5359,	3975,	-1},
	{14,	1907,	1854,	-1},
	{15,	3601,	5748,	-1},
	{16,	6056,	3266,	-1},
	{17,	3322,	4085,	-1},
	{0,	1768,	3244,	-1},
	{1,	2149,	144,	-1},
	{2,	1589,	4291,	-1},
	{3,	5154,	1252,	-1},
	{4,	1855,	5939,	-1},
	{5,	4820,	2706,	-1},
	{6,	1475,	3360,	-1},
	{7,	4266,	693,	-1},
	{8,	4156,	2018,	-1},
	{9,	2103,	752,	-1},
	{10,	3710,	3853,	-1},
	{11,	5123,	931,	-1},
	{12,	6146,	3323,	-1},
	{13,	1939,	5002,	-1},
	{14,	5140,	1437,	-1},
	{15,	1263,	293,	-1},
	{16,	5949,	4665,	-1},
	{17,	4548,	6380,	-1},
	{0,	3171,	4690,	-1},
	{1,	5204,	2114,	-1},
	{2,	6384,	5565,	-1},
	{3,	5722,	1757,	-1},
	{4,	2805,	6264,	-1},
	{5,	1202,	2616,	-1},
	{6,	1018,	3244,	-1},
	{7,	4018,	5289,	-1},
	{8,	2257,	3067,	-1},
	{9,	2483,	3073,	-1},
	{10,	1196,	5329,	-1},
	{11,	649,	3918,	-1},
	{12,	3791,	4581,	-1},
	{13,	5028,	3803,	-1},
	{14,	3119,	3506,	-1},
	{15,	4779,	431,	-1},
	{16,	3888,	5510,	-1},
	{17,	4387,	4084,	-1},
	{0,	5836,	1692,	-1},
	{1,	5126,	1078,	-1},
	{2,	5721,	6165,	-1},
	{3,	3540,	2499,	-1},
	{4,	2225,	6348,	-1},
	{5,	1044,	1484,	-1},
	{6,	6323,	4042,	-1},
	{7,	1313,	5603,	-1},
	{8,	1303,	3496,	-1},
	{9,	3516,	3639,	-1},
	{10,	5161,	2293,	-1},
	{11,	4682,	3845,	-1},
	{12,	3045,	643,	-1},
	{13,	2818,	2616,	-1},
	{14,	3267,	649,	-1},
	{15,	6236,	593,	-1},
	{16,	646,	2948,	-1},
	{17,	4213,	1442,	-1},
	{0,	5779,	1596,	-1},
	{1,	2403,	1237,	-1},
	{2,	2217,	1514,	-1},
	{3,	5609,	716,	-1},
	{4,	5155,	3858,	-1},
	{5,	1517,	1312,	-1},
	{6,	2554,	3158,	-1},
	{7,	5280,	2643,	-1},
	{8,	4990,	1353,	-1},
	{9,	5648,	1170,	-1},
	{10,	1152,	4366,	-1},
	{11,	3561,	5368,	-1},
	{12,	3581,	1411,	-1},
	{13,	5647,	4661,	-1},
	{14,	1542,	5401,	-1},
	{15,	5078,	2687,	-1},
	{16,	316,	1755,	-1},
	{17,	3392,	1991,	-1}
};
/*
 * Short FEC frame 1/4
 */
const int
Dvb_s2::Ldpc::_acc_addr_table_short_1_4[][13] = {
	{6295,	9626,	304,	7695,	4839,	4936,	1660,	144,	11203,	5567,	6347,	12557,	-1},
	{10691,	4988,	3859,	3734,	3071,	3494,	7687,	10313,	5964,	8069,	8296,	11090,	-1},
	{10774,	3613,	5208,	11177,	7676,	3549,	8746,	6583,	7239,	12265,	2674,	4292,	-1},
	{11869,	3708,	5981,	8718,	4908,	10650,	6805,	3334,	2627,	10461,	9285,	11120,	-1},
	{7844,	3079,	10773,	-1},
	{3385,	10854,	5747,	-1},
	{1360,	12010,	12202,	-1},
	{6189,	4241,	2343,	-1},
	{9840,	12726,	4977,	-1}
};
/*
 * Short FEC frame 1/3
 */
const int
Dvb_s2::Ldpc::_acc_addr_table_short_1_3[][13] = {
	{416,	8909,	4156,	3216,	3112,	2560,	2912,	6405,	8593,	4969,	6723,	6912,	-1},
	{8978,	3011,	4339,	9312,	6396,	2957,	7288,	5485,	6031,	10218,	2226,	3575,	-1},
	{3383,	10059,	1114,	10008,	10147,	9384,	4290,	434,	5139,	3536,	1965,	2291,	-1},
	{2797,	3693,	7615,	7077,	743,	1941,	8716,	6215,	3840,	5140,	4582,	5420,	-1},
	{6110,	8551,	1515,	7404,	4879,	4946,	5383,	1831,	3441,	9569,	10472,	4306,	-1},
	{1505,	5682,	7778,	-1},
	{7172,	6830,	6623,	-1},
	{7281,	3941,	3505,	-1},
	{10270,	8669,	914,	-1},
	{3622,	7563,	9388,	-1},
	{9930,	5058,	4554,	-1},
	{4844,	9609,	2707,	-1},
	{6883,	3237,	1714,	-1},
	{4768,	3878,	10017,	-1},
	{10127,	3334,	8267,	-1}
};
/*
 * Short FEC frame 2/5
 */
const int
Dvb_s2::Ldpc::_acc_addr_table_short_2_5[][13] = {
	{5650,	4143,	8750,	583,	6720,	8071,	635,	1767,	1344,	6922,	738,	6658,	-1},
	{5696,	1685,	3207,	415,	7019,	5023,	5608,	2605,	857,	6915,	1770,	8016,	-1},
	{3992,	771,	2190,	7258,	8970,	7792,	1802,	1866,	6137,	8841,	886,	1931,	-1},
	{4108,	3781,	7577,	6810,	9322,	8226,	5396,	5867,	4428,	8827,	7766,	2254,	-1},
	{4247,	888,	4367,	8821,	9660,	324,	5864,	4774,	227,	7889,	6405,	8963,	-1},
	{9693,	500,	2520,	2227,	1811,	9330,	1928,	5140,	4030,	4824,	806,	3134,	-1},
	{1652,	8171,	1435,	-1},
	{3366,	6543,	3745,	-1},
	{9286,	8509,	4645,	-1},
	{7397,	5790,	8972,	-1},
	{6597,	4422,	1799,	-1},
	{9276,	4041,	3847,	-1},
	{8683,	7378,	4946,	-1},
	{5348,	1993,	9186,	-1},
	{6724,	9015,	5646,	-1},
	{4502,	4439,	8474,	-1},
	{5107,	7342,	9442,	-1},
	{1387,	8910,	2660,	-1}
};
/*
 * Short FEC frame 1/2
 */
const int
Dvb_s2::Ldpc::_acc_addr_table_short_1_2[][9] = {
	{20,	712,	2386,	6354,	4061,	1062,	5045,	5158,	-1},
	{21,	2543,	5748,	4822,	2348,	3089,	6328,	5876,	-1},
	{22,	926,	5701,	269,	3693,	2438,	3190,	3507,	-1},
	{23,	2802,	4520,	3577,	5324,	1091,	4667,	4449,	-1},
	{24,	5140,	2003,	1263,	4742,	6497,	1185,	6202,	-1},
	{0,	4046,	6934,	-1},
	{1,	2855,	66,	-1},
	{2,	6694,	212,	-1},
	{3,	3439,	1158,	-1},
	{4,	3850,	4422,	-1},
	{5,	5924,	290,	-1},
	{6,	1467,	4049,	-1},
	{7,	7820,	2242,	-1},
	{8,	4606,	3080,	-1},
	{9,	4633,	7877,	-1},
	{10,	3884,	6868,	-1},
	{11,	8935,	4996,	-1},
	{12,	3028,	764,	-1},
	{13,	5988,	1057,	-1},
	{14,	7411,	3450,	-1}
};
/*
 * Short FEC frame 3/5
 */
const int
Dvb_s2::Ldpc::_acc_addr_table_short_3_5[][13] = {
	{2765,	5713,	6426,	3596,	1374,	4811,	2182,	544,	3394,	2840,	4310,	771,	-1},
	{4951,	211,	2208,	723,	1246,	2928,	398,	5739,	265,	5601,	5993,	2615,	-1},
	{210,	4730,	5777,	3096,	4282,	6238,	4939,	1119,	6463,	5298,	6320,	4016,	-1},
	{4167,	2063,	4757,	3157,	5664,	3956,	6045,	563,	4284,	2441,	3412,	6334,	-1},
	{4201,	2428,	4474,	59,	1721,	736,	2997,	428,	3807,	1513,	4732,	6195,	-1},
	{2670,	3081,	5139,	3736,	1999,	5889,	4362,	3806,	4534,	5409,	6384,	5809,	-1},
	{5516,	1622,	2906,	3285,	1257,	5797,	3816,	817,	875,	2311,	3543,	1205,	-1},
	{4244,	2184,	5415,	1705,	5642,	4886,	2333,	287,	1848,	1121,	3595,	6022,	-1},
	{2142,	2830,	4069,	5654,	1295,	2951,	3919,	1356,	884,	1786,	396,	4738,	-1},
	{0,	2161,	2653,	-1},
	{1,	1380,	1461,	-1},
	{2,	2502,	3707,	-1},
	{3,	3971,	1057,	-1},
	{4,	5985,	6062,	-1},
	{5,	1733,	6028,	-1},
	{6,	3786,	1936,	-1},
	{7,	4292,	956,	-1},
	{8,	5692,	3417,	-1},
	{9,	266,	4878,	-1},
	{10,	4913,	3247,	-1},
	{11,	4763,	3937,	-1},
	{12,	3590,	2903,	-1},
	{13,	2566,	4215,	-1},
	{14,	5208,	4707,	-1},
	{15,	3940,	3388,	-1},
	{16,	5109,	4556,	-1},
	{17,	4908,	4177,	-1}
};
/*
 * Short FEC frame 2/3
 */
const int
Dvb_s2::Ldpc::_acc_addr_table_short_2_3[][14] = {
	{0,	2084,	1613,	1548,	1286,	1460,	3196,	4297,	2481,	3369,	3451,	4620,	2622,	-1},
	{1,	122,	1516,	3448,	2880,	1407,	1847,	3799,	3529,	373,	971,	4358,	3108,	-1},
	{2,	259,	3399,	929,	2650,	864,	3996,	3833,	107,	5287,	164,	3125,	2350,	-1},
	{3,	342,	3529,	-1},
	{4,	4198,	2147,	-1},
	{5,	1880,	4836,	-1},
	{6,	3864,	4910,	-1},
	{7,	243,	1542,	-1},
	{8,	3011,	1436,	-1},
	{9,	2167,	2512,	-1},
	{10,	4606,	1003,	-1},
	{11,	2835,	705,	-1},
	{12,	3426,	2365,	-1},
	{13,	3848,	2474,	-1},
	{14,	1360,	1743,	-1},
	{0,	163,	2536,	-1},
	{1,	2583,	1180,	-1},
	{2,	1542,	509,	-1},
	{3,	4418,	1005,	-1},
	{4,	5212,	5117,	-1},
	{5,	2155,	2922,	-1},
	{6,	347,	2696,	-1},
	{7,	226,	4296,	-1},
	{8,	1560,	487,	-1},
	{9,	3926,	1640,	-1},
	{10,	149,	2928,	-1},
	{11,	2364,	563,	-1},
	{12,	635,	688,	-1},
	{13,	231,	1684,	-1},
	{14,	1129,	3894,	-1}
};
/*
 * Short FEC frame 3/4
 */
const int
Dvb_s2::Ldpc::_acc_addr_table_short_3_4[][13] = {
	{3,	3198,	478,	4207,	1481,	1009,	2616,	1924,	3437,	554,	683,	1801,	-1},
	{4,	2681,	2135,	-1},
	{5,	3107,	4027,	-1},
	{6,	2637,	3373,	-1},
	{7,	3830,	3449,	-1},
	{8,	4129,	2060,	-1},
	{9,	4184,	2742,	-1},
	{10,	3946,	1070,	-1},
	{11,	2239,	984,	-1},
	{0,	1458,	3031,	-1},
	{1,	3003,	1328,	-1},
	{2,	1137,	1716,	-1},
	{3,	132,	3725,	-1},
	{4,	1817,	638,	-1},
	{5,	1774,	3447,	-1},
	{6,	3632,	1257,	-1},
	{7,	542,	3694,	-1},
	{8,	1015,	1945,	-1},
	{9,	1948,	412,	-1},
	{10,	995,	2238,	-1},
	{11,	4141,	1907,	-1},
	{0,	2480,	3079,	-1},
	{1,	3021,	1088,	-1},
	{2,	713,	1379,	-1},
	{3,	997,	3903,	-1},
	{4,	2323,	3361,	-1},
	{5,	1110,	986,	-1},
	{6,	2532,	142,	-1},
	{7,	1690,	2405,	-1},
	{8,	1298,	1881,	-1},
	{9,	615,	174,	-1},
	{10,	1648,	3112,	-1},
	{11,	1415,	2808,	-1}
};
/*
 * Short FEC frame 4/5
 */
const int
Dvb_s2::Ldpc::_acc_addr_table_short_4_5[][4] = {
	{5,	896,	1565,	-1},
	{6,	2493,	184,	-1},
	{7,	212,	3210,	-1},
	{8,	727,	1339,	-1},
	{9,	3428,	612,	-1},
	{0,	2663,	1947,	-1},
	{1,	230,	2695,	-1},
	{2,	2025,	2794,	-1},
	{3,	3039,	283,	-1},
	{4,	862,	2889,	-1},
	{5,	376,	2110,	-1},
	{6,	2034,	2286,	-1},
	{7,	951,	2068,	-1},
	{8,	3108,	3542,	-1},
	{9,	307,	1421,	-1},
	{0,	2272,	1197,	-1},
	{1,	1800,	3280,	-1},
	{2,	331,	2308,	-1},
	{3,	465,	2552,	-1},
	{4,	1038,	2479,	-1},
	{5,	1383,	343,	-1},
	{6,	94,	236,	-1},
	{7,	2619,	121,	-1},
	{8,	1497,	2774,	-1},
	{9,	2116,	1855,	-1},
	{0,	722,	1584,	-1},
	{1,	2767,	1881,	-1},
	{2,	2701,	1610,	-1},
	{3,	3283,	1732,	-1},
	{4,	168,	1099,	-1},
	{5,	3074,	243,	-1},
	{6,	3460,	945,	-1},
	{7,	2049,	1746,	-1},
	{8,	566,	1427,	-1},
	{9,	3545,	1168,	-1}
};
/*
 * Short FEC frame 5/6
 */
const int
Dvb_s2::Ldpc::_acc_addr_table_short_5_6[][14] = {
	{3,	2409,	499,	1481,	908,	559,	716,	1270,	333,	2508,	2264,	1702,	2805,	-1},
	{4,	2447,	1926,	-1},
	{5,	414,	1224,	-1},
	{6,	2114,	842,	-1},
	{7,	212,	573,	-1},
	{0,	2383,	2112,	-1},
	{1,	2286,	2348,	-1},
	{2,	545,	819,	-1},
	{3,	1264,	143,	-1},
	{4,	1701,	2258,	-1},
	{5,	964,	166,	-1},
	{6,	114,	2413,	-1},
	{7,	2243,	81,	-1},
	{0,	1245,	1581,	-1},
	{1,	775,	169,	-1},
	{2,	1696,	1104,	-1},
	{3,	1914,	2831,	-1},
	{4,	532,	1450,	-1},
	{5,	91,	974,	-1},
	{6,	497,	2228,	-1},
	{7,	2326,	1579,	-1},
	{0,	2482,	256,	-1},
	{1,	1117,	1261,	-1},
	{2,	1257,	1658,	-1},
	{3,	1478,	1225,	-1},
	{4,	2511,	980,	-1},
	{5,	2320,	2675,	-1},
	{6,	435,	1278,	-1},
	{7,	228,	503,	-1},
	{0,	1885,	2369,	-1},
	{1,	57,	483,	-1},
	{2,	838,	1050,	-1},
	{3,	1231,	1990,	-1},
	{4,	1738,	68,	-1},
	{5,	2392,	951,	-1},
	{6,	163,	645,	-1},
	{7,	2644,	1704,	-1}
};
/*
 * Short FEC frame 8/9
 */
const int
Dvb_s2::Ldpc::_acc_addr_table_short_8_9[][5] = {
	{0,	1558,	712,	805,	-1},
	{1,	1450,	873,	1337,	-1},
	{2,	1741,	1129,	1184,	-1},
	{3,	294,	806,	1566,	-1},
	{4,	482,	605,	923,	-1},
	{0,	926,	1578,	-1},
	{1,	777,	1374,	-1},
	{2,	608,	151,	-1},
	{3,	1195,	210,	-1},
	{4,	1484,	692,	-1},
	{0,	427,	488,	-1},
	{1,	828,	1124,	-1},
	{2,	874,	1366,	-1},
	{3,	1500,	835,	-1},
	{4,	1496,	502,	-1},
	{0,	1006,	1701,	-1},
	{1,	1155,	97,	-1},
	{2,	657,	1403,	-1},
	{3,	1453,	624,	-1},
	{4,	429,	1495,	-1},
	{0,	809,	385,	-1},
	{1,	367,	151,	-1},
	{2,	1323,	202,	-1},
	{3,	960,	318,	-1},
	{4,	1451,	1039,	-1},
	{0,	1098,	1722,	-1},
	{1,	1015,	1428,	-1},
	{2,	1261,	1564,	-1},
	{3,	544,	1190,	-1},
	{4,	1472,	1246,	-1},
	{0,	508,	630,	-1},
	{1,	421,	1704,	-1},
	{2,	284,	898,	-1},
	{3,	392,	577,	-1},
	{4,	1155,	556,	-1},
	{0,	631,	1000,	-1},
	{1,	732,	1368,	-1},
	{2,	1328,	329,	-1},
	{3,	1515,	506,	-1},
	{4,	1104,	1172,	-1}
};
